package com.jymj.service.impl;

import com.jymj.dao.GhDao;
import com.jymj.entity.CjEntity;
import com.jymj.entity.CyfzHzkfEntity;
import com.jymj.entity.CyfzSyEntity;
import com.jymj.entity.GhEntity;
import com.jymj.entity.fhtnty.GhFhEntity;
import com.jymj.service.GhService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

@Service
public class GhServiceImpl implements GhService {

    @Autowired
    private GhDao ghDao;

    @Override
    public List<GhFhEntity> queryByCode(String code) {
        List<GhEntity> ghEntityList = ghDao.queryByCode(code);
        List<GhFhEntity> ghFhEntities = new ArrayList<>();
        Map<String,List<GhEntity>> map = ghEntityList.stream()
                .collect(Collectors.groupingBy(GhEntity::getXzqmc, LinkedHashMap::new,Collectors.toList()));
        Object[] array = map.keySet().toArray();
        for (Object array1 : array){
            GhFhEntity ghFhEntity = new GhFhEntity();
            String proj = array1+"";
            ghFhEntity.setProj(proj);
            if (map.get(proj) != null){
                ghFhEntity.setEntityList(map.get(proj));
                BigDecimal zmj = new BigDecimal(0);
                for (GhEntity ghEntity :map.get(proj)){
                    zmj = zmj.add(ghEntity.getArea() == null ? new BigDecimal(0) : ghEntity.getArea());
                }
                ghFhEntity.setZmj(zmj);
            }
            ghFhEntities.add(ghFhEntity);
        }
        return ghFhEntities;
    }

    @Override
    public List<GhEntity> queryBydkyt(Integer pjid) {
        return ghDao.queryBydkyt(pjid);
    }

    @Override
    public List<CyfzSyEntity> querySyfx(Integer pjid) {
        return ghDao.querySyfx(pjid);
    }

    @Override
    public List<CyfzHzkfEntity> querySyfxHzkf(Integer pjid) {
        return ghDao.querySyfxHzkf(pjid);
    }

    @Override
    public List<GhFhEntity> queryByGznx(Integer pjid) {
        List<GhFhEntity> ghFhEntutyList = ghDao.getGznxById(pjid);
        List<GhFhEntity> ghFhEntuties = new ArrayList<>();
        BigDecimal zj = new BigDecimal(0);
        BigDecimal zmj = new BigDecimal(0);
        for (int i = 0; i < ghFhEntutyList.size(); i++) {
            List<GhEntity> ghEntityList = ghDao.queryByGznx(Integer.valueOf(ghFhEntutyList.get(i).getProj()), pjid);
            GhFhEntity ghFhEntity = new GhFhEntity();
            ghFhEntity.setEntityList(ghEntityList);
            ghFhEntity.setProj(ghFhEntutyList.get(i).getProj());
            ghFhEntity.setZjjg(ghFhEntutyList.get(i).getZjjg());
            ghFhEntity.setZmj(ghFhEntutyList.get(i).getZmj());

            zj = zj.add(ghFhEntutyList.get(i).getZjjg());
            zmj = zmj.add(ghFhEntutyList.get(i).getZmj());
            ghFhEntuties.add(ghFhEntity);
        }
        if (zj != null && zmj != null) {
            GhFhEntity ghFhEntity = new GhFhEntity();
            ghFhEntity.setProj("合计");
            ghFhEntity.setZjjg(zj);
            ghFhEntity.setZmj(zmj);
            ghFhEntity.setJzjg(zj.divide(zmj, 2, BigDecimal.ROUND_HALF_UP));
            ghFhEntuties.add(ghFhEntity);
        }
        return ghFhEntuties;
    }

    @Override
    public List<GhEntity> queryByDkbh(String dkbh, String point, Integer pjid) {
        List<GhEntity> ghEntityList;
        if (point == null || point.equals("")) {
            ghEntityList = ghDao.queryByDkbh(dkbh,pjid);
        } else {
            ghEntityList = ghDao.queryByPoint(point,pjid);
        }
        return ghEntityList;
    }

    @Override
    public void updateGh(GhEntity ghEntity) {
        ghDao.updateGh(ghEntity);
    }

    @Override
    public List<GhFhEntity> getGznxByType(Integer pjid) {
        List<GhFhEntity> ghFhEntutyList = ghDao.getGznxByType(pjid);
        BigDecimal zj = new BigDecimal(0);
        BigDecimal zmj = new BigDecimal(0);
        List<GhFhEntity> ghFhEntuties = new ArrayList<>();
        for (int i = 0; i < ghFhEntutyList.size(); i++) {
            List<GhEntity> ghEntityList = ghDao.queryByType(Integer.valueOf(ghFhEntutyList.get(i).getProj()), pjid);
            GhFhEntity ghFhEntuty = new GhFhEntity();
            ghFhEntuty.setEntityList(ghEntityList);
            ghFhEntuty.setProj(ghFhEntutyList.get(i).getProj().equals("1") ? "公寓" : (ghFhEntutyList.get(i).getProj().equals("2") ? "宅基地"
                    : (ghFhEntutyList.get(i).getProj().equals("3") ? "公服" : "产业")));
            ghFhEntuty.setZjjg(ghFhEntutyList.get(i).getZjjg());
            ghFhEntuty.setZmj(ghFhEntutyList.get(i).getZmj());

            zj = zj.add(ghFhEntutyList.get(i).getZjjg());
            zmj = zmj.add(ghFhEntutyList.get(i).getZmj());
            ghFhEntuties.add(ghFhEntuty);
        }
        if (zj != null && zmj != null) {
            GhFhEntity ghFhEntuty = new GhFhEntity();
            ghFhEntuty.setProj("合计");
            ghFhEntuty.setZjjg(zj);
            ghFhEntuty.setZmj(zmj);
            ghFhEntuty.setJzjg(zj.divide(zmj, 2, BigDecimal.ROUND_HALF_UP));
            ghFhEntuties.add(ghFhEntuty);
        }
        return ghFhEntuties;
    }

    @Override
    public List<CjEntity> selectCj(String code) {
        return ghDao.selectCj(code);
    }

    @Override
    public List<GhEntity> queryGh(Map map) {
        return ghDao.queryGh(map);
    }

}
